<?php
/* 
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

class Boladona_Helper_LogOn extends Zend_Controller_Action_Helper_Abstract
{

    /**
     *
     * Retorna a identidade do usuario atual, se ela for conhecida.
     * <p/>
     * Se $exigir for true, exige que o usuario se identifique, caso ja
     * nao o tenha feito.
     *
     * @param boolean $exigir
     * @return identidade do usuario, se conhecida, NULL, caso contrario.
     *         Se $exigir for true, esta funcao somente retorna uma identidade
     *         valida.
     */
    public function direct ($exigir = false)
    {
        if ($exigir) {
            return $this->exigirIdentidade();
        } else {
            return $this->getIdentidade();
        }
    }

    /**
     * @return string Retorna a identidade do usuario atual, se ela for
     *                conhecida.
     */
    public function getIdentidade ()
    {
        $auth = Zend_Auth::getInstance();
        if ($auth->hasIdentity()) {
            return $this->getUsuario($auth->getIdentity());
        } else {
            return NULL;
        }

    }

    public function exigirIdentidade ()
    {

        $auth = Zend_Auth::getInstance();
        if ($auth->hasIdentity()) {
            return $this->getUsuario($auth->getIdentity());
        } else {
            $this->providenciaIdentidade();
        }

    }

    private function providenciaIdentidade ()
    {

        $sessao = new Zend_Session_Namespace('Boladona_logon_helper');
        $request = $this->getRequest();

        //salva a pagina atual, para retornar a ela, assim que o login tiver
        //sucesso.
        $sessao->redireciona = $request->getRequestUri();

        $redirecionador = new Zend_Controller_Action_Helper_Redirector();
        $redirecionador->direct('log-on', 'usuario', '');

    }

    /**
     * Esta funcao é chamada pelo controlador de login, indicando que uma
     * identidade já esta disponivel. Esta funcao é utilizada para efetuar
     * ações pós-login.
     */
    public function loginEfetuado ()
    {

        $sessao = new Zend_Session_Namespace('Boladona_logon_helper');

        if (isset($sessao->redireciona)) {
            $url = $sessao->redireciona;
            unset($sessao->redireciona);
            $redirecionador = new Zend_Controller_Action_Helper_Redirector();
            $redirecionador->gotoUrl($url);
        }
        else
        {
            $redirecionador = new Zend_Controller_Action_Helper_Redirector();
            $redirecionador->gotoUrl('index');
        }

    }

    private function getUsuario ($email)
    {
        $usuarioMapper = new Application_Model_UsuarioMapper();
        $usuario = new Application_Model_Usuario(NULL, NULL, NULL, NULL, NULL, NULL, NULL);
        $usuarioMapper->find($email, $usuario);
        return $usuario;
    }

}
